﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DOMINIO;
using DAL.ConexionBD;
using System.Data.SqlClient;
using System.Data;

namespace DAL
{
    public class EmpleadoDAL
    {
        private SqlConnection cnn;

        public void Guardar(Empleado empleado)
        {
            cnn = (SqlConnection)ConexionSQL.getInstancia().getConexion();
            SqlCommand cmd = new SqlCommand("PA_registrarEmpleado", cnn);
            cmd.CommandType = CommandType.StoredProcedure;

            cmd.Parameters.AddWithValue("@Id", empleado.Id);
            cmd.Parameters.AddWithValue("@Nombres", empleado.Nombres);
            cmd.Parameters.AddWithValue("@Apellidos", empleado.Apellidos);
            cmd.Parameters.AddWithValue("@Direccion", empleado.Direccion);
            cmd.Parameters.AddWithValue("@Dni", empleado.Dni);
            cmd.Parameters.AddWithValue("@Email", empleado.Email);
            cmd.Parameters.AddWithValue("@Telefono", empleado.Telefono);
            cmd.Parameters.AddWithValue("@Activo", empleado.Activo);

            try
            {
                cnn.Open();
                cmd.ExecuteNonQuery();
                empleado.Id = (Int32)(cmd.Parameters["@Id"].Value);
            }
            catch (SqlException ex)
            {
                throw new Exception("Error SQL: " + ex.Message);
            }

            //curso.Id = int.Parse(comando.Parameters["@Id"].Value.ToString());
            cnn.Close();
        }

        public Empleado BuscarEmpleadoPorCodigo(int codigo)
        {
            cnn = (SqlConnection)ConexionSQL.getInstancia().getConexion();
            SqlCommand cmd = new SqlCommand("PA_BuscarEmpleado", cnn);
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.AddWithValue("@nombre", "#");
            cmd.Parameters.AddWithValue("@Id", codigo);

            return SelectFactory(cnn, cmd)[0];
        }
        public Empleado BuscarEmpleadoPorDni(int dni)
        {
            cnn = (SqlConnection)ConexionSQL.getInstancia().getConexion();
            SqlCommand cmd = new SqlCommand("PA_BuscarEmpleadoporDni", cnn);
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.AddWithValue("@dni", dni);

            return SelectFactory(cnn, cmd)[0];
        }

        public List<Empleado> BuscarEmpleadoPorNombre(string nombre)
        {
            cnn = (SqlConnection)ConexionSQL.getInstancia().getConexion();
            SqlCommand cmd = new SqlCommand("PA_BuscarEmpleado", cnn);
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.AddWithValue("@nombre", nombre);
            cmd.Parameters.AddWithValue("@Id", 0);

            return SelectFactory(cnn, cmd);
        }

        private static List<Empleado> SelectFactory(SqlConnection cnx, SqlCommand cmd)
        {
            cnx.Open();

            SqlDataReader DR = cmd.ExecuteReader();
            List<Empleado> ListaCurso = new List<Empleado>();

            while (DR.Read())
            {
                Empleado empleado = new Empleado();

                empleado.Id = DR.GetInt32(0);
                empleado.Nombres = DR.GetString(1);
                empleado.Apellidos = DR.GetString(2);
                empleado.Direccion = DR.GetString(3);
                empleado.Dni = DR.GetString(4);
                empleado.Email = DR.GetString(5);
                empleado.Telefono = DR.GetString(6);
                empleado.Activo = DR.GetBoolean(7);

                ListaCurso.Add(empleado);
            }
            cnx.Close();
            return ListaCurso;
        }
    }
}